package com.kevin.socket;

/**
 * @author caonanqing
 * @version 1.0
 * @description     网络编程Socket
 * @createDate 2020/1/11
 */
public class Demo {

    /**
     *
     *      网络编程（Socket）
     *
     *     网络上的两个程序通过一个双向的通信连接实现数据的交互，这个连接的一端称为一个Socket。
     * 建立网络通信连接至少要一个端口号，socket本质是编程接口（API），对TCP/IP的封装，TCP/IP也要提供接口，这便是Socket编程接口。
     * HTTP：提供封装或者显示数据的具体形式。
     * Socket：提供网络通信的能力。
     *
     * Socket也被称为"套接字"，用于描述IP地址和接口，是一个通信链的句柄，用于实现不同虚拟机或者不同计算机之间的通信。
     * （每个服务都有一个Socket，并绑定在端口上，不同的端口对应不同的服务。）
     *
     * Socket连接步骤
     *      三个步骤：服务器监听，客户端请求，连接确认。（如果包含数据交互+断开连接则是有五个步骤）
     *      1、服务器监听：是服务器端套接字并不定位具体的客户端套接字，而是处于等待连接的状态，实时监控网络状态。
     *      2、客户端请求：指由客户端的套接字提出连接请求，要连接的目标是服务器端的套接字，
     *          客户端的套接字必须首先描述它要连接的服务器的套接字，指出服务器套接字的地址和端口号，然后向服务器端套接字提出连接请求。
     *      3、连接确认：指当服务器端套接字监听到或者说接收到客户端套接字的连接请求，它就会响应客户端套接字的请求，建立一个新的线程，
     *          把服务端套接字描述发给客户端套接字，一旦客户端确认了该描述，连接就建立好了。而服务器端套接字则继续处于监听状态，继续接收其它客户端的连接请求。
     *
     * 过程：
     *      1、启动服务器端监听。
     *      2、客户端发送连接请求。
     *      3、服务器端接收请求并响应该描述。
     *      4、客户端确认连接。
     *      5、客户端与服务端数据交互。
     *      6、客户端发送断开连接请求。
     *      7、服务端发送断开描述并关闭与客户端的连接。
     *      8、客户端关闭与服务端的连接。
     *
     *      Java中的ServerSocket和Socket是网络编程的基础类型，ServerSocket是服务端应用类型，Socket是建立连接的类型，
     * 当连接建立成功后，服务端和客户端都会有一个Socket对象。
     *
     *
     */
}
